package demo1.Bridge;

/**
 * @ClassName BridgeTest
 * @Description TODO
 * @Author 耀酱
 * @Date 2023/6/5 12:37
 * @Version 1.0
 */
//将抽象部分与实现部分分离，在两者之间建立一个桥梁，使它们能够独立变化，从而提高系统的可扩展性和灵活性。下面是一个桥接模式的示例：
// 不同操作系统需要播放不同格式文件，操作系统是一个维度，包含抽象和实现； 文件形式也是一个维度，包含抽象实现
public class BridgeTest {
    public static void main(String[] args) {
        OperatingSystem operatingSystem = new Mac(new RMVBFile());
        operatingSystem.play("小红帽历险记");
    }
}
// 解码接口方法
interface VideoFile{
    void decode(String fileName);
}

class AVIFile implements VideoFile{
    public AVIFile(){

    }

    @Override
    public void decode(String fileName) {
        System.out.println("编码AVI文件....."+fileName);
    }
}

class RMVBFile implements VideoFile{
    public RMVBFile(){

    }

    @Override
    public void decode(String fileName) {
        System.out.println("编码RMVB文件....."+fileName);
    }
}
// 抽象化操作系统
abstract class OperatingSystem{
    protected VideoFile videoFile;

    public OperatingSystem(VideoFile videoFile){
        this.videoFile = videoFile;
    }

    public abstract void play(String fileName);
}

// Windows平台
class Windows extends OperatingSystem{

    public Windows(VideoFile videoFile){
        super(videoFile);
    }

    @Override
    public void play(String fileName) {
        System.out.println("windows播放");
        videoFile.decode(fileName);
    }
}
// Mac平台
class Mac extends OperatingSystem{

    public Mac(VideoFile videoFile){
        super(videoFile);
    }

    @Override
    public void play(String fileName) {
        System.out.println("mac播放");
        videoFile.decode(fileName);
    }
}
